<?php
/**
 * klasa modelu
 * 
 * jest to jednocześnie główna klasa inicjująca pracę modeli oraz klasa, po której wszystkie modele dziedziczą
 * @abstract
 */
abstract class Model {
	/**
	 * informacja o tym, czy baza danych jest już zainicjowana
	 * @var bool
	 * @access private
	 * @static
	 */
	private static $started = false;
	/**
	 * połączenie z bazą danych
	 * @var MongoConnection
	 * @access protected
	 * @static
	 */
	protected static $connection;
	/**
	 * wybrana baza danych
	 * @var MongoDB
	 * @access protected
	 * @static
	 */
	protected static $database;
	/**
	 * tablica ze wszystkimi danymi przekazywanymi kontrolerowi
	 * 
	 * każdy model ma przypisaną swoją nazwę w tablicy
	 * @access private
	 * @static
	 */
	private static $allData = array();
	/**
	 * dane konkretnego modelu
	 * @access protected
	 */
	protected $data = array();
	/**
	 * metoda inicjująca model
	 * @access protected
	 * @static
	 */
	protected static function init () {
		if(!self::$started) {
			Db::init();
			self::$connection = Db::getConnection();
			self::$database = Db::getDatabase();
		}
	}
	/**
	 * zwraca dane modelu
	 * @access public
	 * @return tablica ze wszystkimi danymi do wyświetlenia
	 */
	public function getData () {
		return $this->data;
	}
	/**
	 * ładuje odpowiednie modele
	 * @access public
	 * @static
	 * @param array $models lista modeli do załadowania
	 */
	public static function loadModels($data) {
		self::init();
		if(is_array($data)) {
			foreach($data as $model => $params) {
				$m = false;
				switch($model) {
					case 'ad':
						$m = new Model\Ad($data);
						break;
					case 'category':
						$m = new Model\Category($data);
						break;
				}
				if($m) {
					self::$allData[$model] = $m->getData();
				}
			}
		}
	}
	/**
	 * zwraca dane zebrane przez wszystkie modele
	 * @access public
	 * @static
	 * @return zwraca tablicę, gdzie pod jednym indeksem znajdują się wszystkie dane jednego modelu
	 */
	public static function getAllData () {
		$log = new Log('Model::getAllData');
		$log->add('<pre>allData: '.print_r(self::$allData, true).'</pre>');
		return self::$allData;
	}
}
?>